class JavaLang
	attr_reader :initial_state, :version, :states, :keywords
	attr_writer :initial_state
	
	def initialize
		@version = '0.1'
		@initial_state ='OUT'
			@states = Dictionary.new
				@states["OUT"] = Array.new
					@states["OUT"][0] = Dictionary.new
						@states["OUT"][0]["ALPHA"] = Array.new
						@states["OUT"][0]["ALPHA"][0] = "KEYWORD"
						@states["OUT"][0]["ALPHA"][1] = -1

						@states["OUT"][0]["NUMBER"] = Array.new
						@states["OUT"][0]["NUMBER"][0] = "NUM"
						@states["OUT"][0]["NUMBER"][1] = 0

						@states["OUT"][0]["\""] = Array.new
						@states["OUT"][0]["\""][0] = "QUOTE1"
						@states["OUT"][0]["\""][1] = 0

						@states["OUT"][0]["\'"] = Array.new
						@states["OUT"][0]["\'"][0] = "QUOTE2"
						@states["OUT"][0]["\'"][1] = 0

						@states["OUT"][0]["/*"] = Array.new
						@states["OUT"][0]["/*"][0] = "COMMENT1"
						@states["OUT"][0]["/*"][1] = 0

						@states["OUT"][0]["//"] = Array.new
						@states["OUT"][0]["//"][0] = "COMMENT2"
						@states["OUT"][0]["//"][1] = 0

						@states["OUT"][0]["_COUNTAB"] = Array.new
						@states["OUT"][0]["_COUNTAB"][0] = "OUT"
						@states["OUT"][0]["_COUNTAB"][1] = 0


				@states["OUT"][1] = 0
				@states["OUT"][2] = nil
				@states["OUT"][3] = nil

				@states["KEYWORD"] = Array.new
					@states["KEYWORD"][0] = Dictionary.new
						@states["KEYWORD"][0]["!SAFECHAR"] = Array.new
						@states["KEYWORD"][0]["!SAFECHAR"][0] = "_RET"
						@states["KEYWORD"][0]["!SAFECHAR"][1] = 0


				@states["KEYWORD"][1] = 5
				@states["KEYWORD"][2] = nil
				@states["KEYWORD"][3] = nil

				@states["NUM"] = Array.new
					@states["NUM"][0] = Dictionary.new
						@states["NUM"][0]["x"] = Array.new
						@states["NUM"][0]["x"][0] = "HEX_NUM"
						@states["NUM"][0]["x"][1] = 0

						@states["NUM"][0]["."] = Array.new
						@states["NUM"][0]["."][0] = "DEC_NUM"
						@states["NUM"][0]["."][1] = 0

						@states["NUM"][0]["NUMBER"] = Array.new
						@states["NUM"][0]["NUMBER"][0] = "DEC_NUM"
						@states["NUM"][0]["NUMBER"][1] = 0

						@states["NUM"][0]["!NUMBER"] = Array.new
						@states["NUM"][0]["!NUMBER"][0] = "_RET"
						@states["NUM"][0]["!NUMBER"][1] = 1


				@states["NUM"][1] = 4
				@states["NUM"][2] = "java-num"
				@states["NUM"][3] = nil

				@states["DEC_NUM"] = Array.new
					@states["DEC_NUM"][0] = Dictionary.new
						@states["DEC_NUM"][0]["."] = Array.new
						@states["DEC_NUM"][0]["."][0] = "DEC_NUM"
						@states["DEC_NUM"][0]["."][1] = 0

						@states["DEC_NUM"][0]["!NUMBER"] = Array.new
						@states["DEC_NUM"][0]["!NUMBER"][0] = "_RET"
						@states["DEC_NUM"][0]["!NUMBER"][1] = 1


				@states["DEC_NUM"][1] = 0
				@states["DEC_NUM"][2] = "java-num"
				@states["DEC_NUM"][3] = nil

				@states["HEX_NUM"] = Array.new
					@states["HEX_NUM"][0] = Dictionary.new
						@states["HEX_NUM"][0]["!HEXNUM"] = Array.new
						@states["HEX_NUM"][0]["!HEXNUM"][0] = "_RET"
						@states["HEX_NUM"][0]["!HEXNUM"][1] = 1


				@states["HEX_NUM"][1] = 0
				@states["HEX_NUM"][2] = "java-num"
				@states["HEX_NUM"][3] = nil

				@states["QUOTE1"] = Array.new
					@states["QUOTE1"][0] = Dictionary.new
						@states["QUOTE1"][0]["\""] = Array.new
						@states["QUOTE1"][0]["\""][0] = "_RET"
						@states["QUOTE1"][0]["\""][1] = 0


				@states["QUOTE1"][1] = 4
				@states["QUOTE1"][2] = "java-quote"
				@states["QUOTE1"][3] = nil

				@states["QUOTE2"] = Array.new
					@states["QUOTE2"][0] = Dictionary.new
						@states["QUOTE2"][0]["\'"] = Array.new
						@states["QUOTE2"][0]["\'"][0] = "_RET"
						@states["QUOTE2"][0]["\'"][1] = 0


				@states["QUOTE2"][1] = 4
				@states["QUOTE2"][2] = "java-quote"
				@states["QUOTE2"][3] = nil

				@states["COMMENT1"] = Array.new
					@states["COMMENT1"][0] = Dictionary.new
						@states["COMMENT1"][0]["*/"] = Array.new
						@states["COMMENT1"][0]["*/"][0] = "_RET"
						@states["COMMENT1"][0]["*/"][1] = 0

						@states["COMMENT1"][0]["_COUNTAB"] = Array.new
						@states["COMMENT1"][0]["_COUNTAB"][0] = "COMMENT1"
						@states["COMMENT1"][0]["_COUNTAB"][1] = 0


				@states["COMMENT1"][1] = 4
				@states["COMMENT1"][2] = "java-comment"
				@states["COMMENT1"][3] = nil

				@states["COMMENT2"] = Array.new
					@states["COMMENT2"][0] = Dictionary.new
						@states["COMMENT2"][0]["\n"] = Array.new
						@states["COMMENT2"][0]["\n"][0] = "_RET"
						@states["COMMENT2"][0]["\n"][1] = 0

						@states["COMMENT2"][0]["_COUNTAB"] = Array.new
						@states["COMMENT2"][0]["_COUNTAB"][0] = "COMMENT2"
						@states["COMMENT2"][0]["_COUNTAB"][1] = 0


				@states["COMMENT2"][1] = 4
				@states["COMMENT2"][2] = "java-comment"
				@states["COMMENT2"][3] = nil


			@keywords = Array.new
			@keywords[0] = "java-keywords"
				@keywords[1] = Dictionary.new
				@keywords[1]["abstract"] = 1
				@keywords[1]["double"] = 1
				@keywords[1]["int"] = 1
				@keywords[1]["strictfp"] = 1
				@keywords[1]["boolean"] = 1
				@keywords[1]["else"] = 1
				@keywords[1]["interface"] = 1
				@keywords[1]["super"] = 1
				@keywords[1]["break"] = 1
				@keywords[1]["extends"] = 1
				@keywords[1]["long"] = 1
				@keywords[1]["switch"] = 1
				@keywords[1]["byte"] = 1
				@keywords[1]["final"] = 1
				@keywords[1]["native"] = 1
				@keywords[1]["synchronized"] = 1
				@keywords[1]["case"] = 1
				@keywords[1]["finally"] = 1
				@keywords[1]["new"] = 1
				@keywords[1]["this"] = 1
				@keywords[1]["catch"] = 1
				@keywords[1]["float"] = 1
				@keywords[1]["package"] = 1
				@keywords[1]["throw"] = 1
				@keywords[1]["char"] = 1
				@keywords[1]["for"] = 1
				@keywords[1]["private"] = 1
				@keywords[1]["throws"] = 1
				@keywords[1]["class"] = 1
				@keywords[1]["goto"] = 1
				@keywords[1]["protected"] = 1
				@keywords[1]["transient"] = 1
				@keywords[1]["const"] = 1
				@keywords[1]["if"] = 1
				@keywords[1]["public"] = 1
				@keywords[1]["try"] = 1
				@keywords[1]["continue"] = 1
				@keywords[1]["implements"] = 1
				@keywords[1]["return"] = 1
				@keywords[1]["void"] = 1
				@keywords[1]["default"] = 1
				@keywords[1]["import"] = 1
				@keywords[1]["short"] = 1
				@keywords[1]["volatile"] = 1
				@keywords[1]["do"] = 1
				@keywords[1]["instanceof"] = 1
				@keywords[1]["static"] = 1
				@keywords[1]["while"] = 1


	end
end